// a voir
//   def de oCiu['RS']
//   conflit RS et DD
//   partage du cadre fantome entre DD et RS
//   grille magnetique  + deformation symetrique  ? implementer
// verifier les valeurs de retour mod.left, mod.top
// revoir avec Mozilla si bordure large pb direction passe en mode diagonal avant coin bas

var ENREG_RS = 99;           // niveau de trace du DD = 99
var oReSize= null;
var defMargeSensibleDD = 3;

function  RSLoadLimitsDyn (oBase){
//===============================
// limites right-bottom du deplact fct? des dim d'un elt Html (en g?n?ral du parent) au moment du MouseDown
  // calcul / pere
//traceExec('RSLoadLimitsDyn entree');
  // les limites font parties des specs de cr?ation de l'objet ayant le comportement RS
  // il faut juste r??valuer leurs valeurs
  if (this.limitReDim.bRectLim) {
    this.limitReDim.rectLim.bottom      =  eval(this.limitReDim.rectLim.bottomSpecs);
    this.limitReDim.rectLim.right       =  eval(this.limitReDim.rectLim.rightSpecs);
  }
  // pas de directives sp?ciales dans les specs de cr?ation : on utilise les dimensions du parent
  else {
    this.limitReDim.rectLim.bottom      =  pixHeight(oBase);
    this.limitReDim.rectLim.right       =  pixWidth(oBase);
  }
  
  // si max fix?s ? la cr?ation on conserve ces valeurs sinon calcul 
  // corrig? (manquait .retLim.) le 6/04/2004 pour curs a verifier ds d autres ctxte
/*modif du 28/04/2003
this.limitReDim.widthMax    =   this.limitReDim.widthMax 
                               || (this.limitReDim.rectLim.right - this.limitReDim.rectLim.left + 1);
  this.limitReDim.heightMax   =   this.limitReDim.heightMax 
                               || (this.limitReDim.rectLim.bottom - this.limitReDim.rectLim.top + 1);
*/
  if (this.limitReDim.bLimMax) {
    this.limitReDim.widthMax    =   eval(this.limitReDim.widthMaxSpecs); 
    this.limitReDim.heightMax   =   eval(this.limitReDim.heightMaxSpecs);
  }
  else {
    this.limitReDim.widthMax    =  (this.limitReDim.rectLim.right - this.limitReDim.rectLim.left + 1);
    this.limitReDim.heightMax   =  (this.limitReDim.rectLim.bottom - this.limitReDim.rectLim.top + 1);
  }

traceExec('RSLoadLimitsDyn id= '+this.id+' this.limitReDim.rectLim.top = '+ this.limitReDim.rectLim.top,60);
traceExec('RSLoadLimitsDyn this.limitReDim.rectLim.left = '+ this.limitReDim.rectLim.left,58);

traceExec('RSLoadLimitsDyn this.limitReDim.rectLim.bottom = '+ this.limitReDim.rectLim.bottom,60);
traceExec('RSLoadLimitsDyn this.limitReDim.rectLim.right = '+ this.limitReDim.rectLim.right,58);

traceExec('RSLoadLimitsDyn this.limitReDim.rectLim.widthMax = '+ this.limitReDim.widthMax,58);
traceExec('RSLoadLimitsDyn this.limitReDim.rectLim.heightMax = '+ this.limitReDim.heightMax,60);

}

function  RSLoadSpecs (specs){
//===========================
// limitDeplact =
//    {  mobilite    : DragAndDrop / ReSize,      type de mobilite
//       majDyn      : true / false               dim bottom-right des limites / parent calcul?es dyn lors du MouseDown
//       orientation : h,v,2D,                    orientation autoris?e du mouvement
//       posRelI     : { top: , left}             position initiale / parent
//       rectLimit   : {                          coordonn?es / parent du cadre limitant le mouvement (deplacement ou redimensionnenement)
//                       top:
//                       left:
//                       bottom:
//                       right:}
//       cibleEvt    :  target / targetAndCo      cible autoris?e pour d?clencher le mvt : ?tendue ou non ? la descendance de l'oHtml
//                                                ayant le comportement DD
//       circulaire  : true /false                le d?placement est circulaire / cadre limite --> arriver en bas le d?plact se poursuit en haut
//     }

traceExec('RSLoadSpecs entree',76);
this.specs = new Object;

if (! specs)
  specs = new Object;

//--- cibles potentielles
//alert('RSLoadSpecs specs.cibleEvt= '+specs.cibleEvt) ;
 if (!specs.cibleEvt){
   this.specs.cibleEvt = new Array;
   this.specs.cibleEvt[0] = {oHtml: this, mode:'mono', dir:'2D'};
   this.specs.orientation = '2D';
 }
 else
 if (! (specs.cibleEvt instanceof Array)){
   var wCibleEvt = specs.cibleEvt;
   this.specs.cibleEvt = new Array;
   this.specs.cibleEvt[0] = new Object;
   this.specs.cibleEvt[0].oHtml = wCibleEvt.oHtml;
   this.specs.cibleEvt[0].mode  = wCibleEvt.mode || 'mono';
   var orientation = specs.orientation || '2D';
   this.specs.cibleEvt[0].dir   = (this.specs.cibleEvt[0].mode == 'mono') ? orientation : wCibleEvt.dir;
   this.specs.orientation = this.specs.cibleEvt[0].dir;
 }
 else
 if (specs.cibleEvt instanceof Array){
   this.specs.cibleEvt = specs.cibleEvt;
 }
 else{
   traceExec('pb def cible DD',30);
 }
// a voir eventuellement --- limitations internes aux cibles potentielles (notion de marge)
// for (var i=0; i <this.specs.objetCibleEvt; i++){
//  if (this.specs.objetCibleEvt[i].exclusionMarge)
//  ...
//}

//--- objet Html ? deformer in fine
 this.specs.objetADeformer = specs.objetADeformer ?  specs.objetADeformer : this;

//--- apparence du d?placement
this.specs.fantome = new Object;
if (specs.fantome)
   this.specs.fantome.aspect = specs.fantome.aspect || 'cadre';
else
   this.specs.fantome = null;

// this.specs.fantome        = specs.fantome        ?  specs.fantome        : false;

//--- modif apparence du curseur
  this.specs.modCurs = new Object;
  if (specs.modCursor){
    this.specs.modCurs.avantDD   = (specs.modCursor.avantDD != 'undefined') ? specs.modCursor.avantDD : true;
    this.specs.modCurs.auClic    = (specs.modCursor.auClic  != 'undefined') ? specs.modCursor.auClic  : true;
  }
  else {
    this.specs.modCurs.avantDD = true;
    this.specs.modCurs.auClic  = true;
  }

//--- grille magnetique
   if (specs.grilleMagnetic){
      this.specs.magnet = new Object;
      this.specs.magnet.widthCol  = specs.grilleMagnetic.widthCol  || 10;
      this.specs.magnet.heightRow = specs.grilleMagnetic.heightRow || 10;
   }


this.limitReDim = new Object;
//--- symetrie de la deformation
 this.limitReDim.symetrie  = specs.symetrie || false;

  // symetrie --> centrage
  if (this.limitReDim.symetrie)
      this.limitReDim.centrage = true;

// deplacement circonscrit ? un rectangle 
// dont les coordonn?es sont relatives au parent de l'objet ? deplacer in fine
// --> n?cessite le chargement pr?alable ds la page de ces objets (sinon param?trer le DD avec majDyn = true)

 // r?gles appliqu?es :
 //  - par d?faut bRectLim = true
 //  - specs.bRectLim = false et specs.rectLim d?fini incompatibles --> bRectLim forc? ? true
 //  - si bRectLim et pas de .rectLim d?fini dimension de rectLim par d?faut : 0,0,f(parent),f(parent) utilis?s
 this.limitReDim.bRectLim = (specs.bRectLim != null) ? specs.bRectLim :  true;
 this.limitReDim.bLimMax = (specs.bRectLim != null) ? specs.bLimMax :  false;

this.limitReDim.rectLim = new Object;

 if (!specs.rectLim) 
   specs.rectLim = new Object;  // simplement pour ?viter les cas particuliers ds le code ci-dessous
 else {
   this.limitReDim.bRectLim = true;
 }
   
 // on prend les limites definies , pour les autres top=left=0 bottom et right f(parent)
 // top - left
 this.limitReDim.rectLim.left        =  specs.rectLim.left       || 0;  // ajouter eval(...
 this.limitReDim.rectLim.top         =  specs.rectLim.top ;//       || 0;

//--- calcul dynamique (au Md) des limites du d?placement
 this.specs.majDyn         = (specs.majDyn != null)    ?  specs.majDyn         : true;


// bottom - right  
 // (ne sont pas calcul?es ds LoadLimit si le chargt dynamique est demand?, afin d'attendre ?ventuellt le chargt des elts ds la page)
 if (!this.specs.majDyn){  
 // ajouter eval(...
     this.limitReDim.rectLim.right       =  specs.rectLim.right      || pixWidth(this.specs.objetADeformer.parentNode);
     this.limitReDim.rectLim.bottom      =  specs.rectLim.bottom     || pixHeight(this.specs.objetADeformer.parentNode);
}
 else {
   this.limitReDim.rectLim.rightSpecs  =  specs.rectLim.right      || pixWidth(this.specs.objetADeformer.parentNode);
   this.limitReDim.rectLim.bottomSpecs =  specs.rectLim.bottom     || pixHeight(this.specs.objetADeformer.parentNode);

   this.limitReDim.widthMaxSpecs =  specs.rectLim.widthMax;  
   this.limitReDim.heightMaxSpecs =  specs.rectLim.heightMax;

}
// else chargt dynamique pdt Md

  if (!specs.limitReDim) specs.limitReDim = new Object;
  // tailles max et min de l'objet Html apres deformation
  this.limitReDim.heightMin   =  specs.limitReDim.heightMin  || 10;
  this.limitReDim.heightMax   =  specs.limitReDim.heightMax  || (this.limitReDim.bottom - this.limitReDim.top + 1);
traceExec('** RSLoadSpecs specs.limitReDim.widthMin    = ' + specs.limitReDim.widthMin,76);
  this.limitReDim.widthMin    =  specs.limitReDim.widthMin   || 10;
traceExec('** RSLoadSpecs this.limitReDim.rectLim.widthMin    = ' + this.limitReDim.widthMin,76);
  this.limitReDim.widthMax    =  specs.limitReDim.widthMax   || (this.limitReDim.right - this.limitReDim.left + 1);

traceExec('RSLoadSpecs this.limitReDim.rectLim.top    = ' + this.limitReDim.rectLim.top,76);
traceExec('RSLoadSpecs this.limitReDim.rectLim.left   = ' + this.limitReDim.rectLim.left,76);
traceExec('RSLoadSpecs this.limitReDim.rectLim.bottom = ' + this.limitReDim.rectLim.bottom,76);
traceExec('RSLoadSpecs this.limitReDim.rectLim.right  = ' + this.limitReDim.rectLim.right,76);
traceExec('RSLoadSpecs this.limitReDim.rectLim.bottomSpecs = ' + this.limitReDim.rectLim.bottomSpecs,76);
traceExec('RSLoadSpecs this.limitReDim.rectLim.rightSpecs  = ' + this.limitReDim.rectLim.rightSpecs,76);

traceExec('RSLoadSpecs this.limitReDim.rectLim.heightMin   = ' + this.limitReDim.heightMin,76);
traceExec('RSLoadSpecs this.limitReDim.rectLim.heightMax   = ' + this.limitReDim.heightMax,76);
traceExec('RSLoadSpecs this.limitReDim.rectLim.widthMin    = ' + this.limitReDim.widthMin,76);
traceExec('RSLoadSpecs this.limitReDim.rectLim.widthMax    = ' + this.limitReDim.widthMax,76);

//traceExec('RSLoadSpecs this.limitReDim.symetrie = ' + this.limitReDim.symetrie);

//traceExec('RSLoadSpecs this.specs.majDyn = '+ this.specs.majDyn);

//traceExec('RSLoadSpecs this.limitReDim.bRectLim = '+ this.limitReDim.bRectLim);
/*
if (specs.fantome)
   traceExec('RSLoadSpecs this.specs.fantome.aspect = '+this.specs.fantome.aspect);
else
   traceExec('RSLoadSpecs this.specs.fantome = null');

if (specs.grilleMagnetic){
   traceExec('RSLoadSpecs this.specs.magnet.widthCol = ' + this.specs.magnet.widthCol);
   traceExec('RSLoadSpecs this.specs.magnet.heightRow = ' + this.specs.magnet.heightRow);
}
if (specs.modCursor){
   traceExec('RSLoadSpecs this.specs.modCurs.avantDD = '+this.specs.modCurs.avantDD);
   traceExec('RSLoadSpecs this.specs.modCurs.auClic = '+this.specs.modCurs.auClic);
}
*/
traceExec('RSLoadSpecs fin',58);
}




//_________________________________________________________________________________________________________________________________

function ReSize(specs)
//=========================
// restriction : par defaut calcul dynamique des limites deplact --> si pas de d?finition du rect lim
//   une r?f?rence au parent est r?alis?e --> son existence doit ?tre assurer avant l'appel de ReSize sans specs
//        specs = {
//                }
{
          // cr?ation de l'attribut de l'oCiu stockant les infos relatives au DD
          if (!this.oCiu) this.oCiu = new Array();
          this.oCiu['ReSize'] = this;
          this.oCiu['ReSize'].lockReSize = false;

          // chargement des sp?cifications du d?placement
          // r?f?rence aux m?thodes de chargt par d?faut en absence de m?thodes sp?cifiques ? l'oCiu
          if (!this.oCiu['ReSize'].loadSpecsRS){
             this.oCiu['ReSize'].loadSpecsRS = RSLoadSpecs; // modif du 23/12/2003
//             alert('pas de loadSpecs');
          }
//alert(this.oCiu['ReSize'].loadSpecs);
          // chargement des limites non dynamiques   (dynamiques cf. mouseDown)
          this.oCiu['ReSize'].loadSpecsRS(specs);
//alert('specs.cibleEvt= ' + this.oCiu['ReSize'].cibleEvt) ;


             // pour le chargt dynamique, r?f?rence ? la m?thode dynamique standart
             if (this.oCiu['ReSize'].specs.majDyn) {
                if (!this.oCiu['ReSize'].loadLimitsDynRS)   // modif du 23/12/2003
                   this.oCiu['ReSize'].loadLimitsDynRS = RSLoadLimitsDyn;
                //alert("this.oCiu['ReSize'].specs.objetADeformer.id = "+this.oCiu['ReSize'].specs.objetADeformer.id);
                this.oCiu['ReSize'].loadLimitsDynRS(this.oCiu['ReSize'].specs.objetADeformer.parentNode);   
            }

             // inscrit dans l'objet Html directement (ou via des pointeurs vers) les infos relatives au ReSize
             var oCiu = this.oCiu['ReSize'];
             var oHtmlCible;
             for (var i=0; i < oCiu.specs.cibleEvt.length; i++) {
                 oHtmlCible = oCiu.specs.cibleEvt[i].oHtml;

                 oHtmlCible.reSize   = true;                         // marque l oHtml comme deformable
                 oHtmlCible.refObjSpecsRS = this;                    // pointeur vers les specifs g?n?rales
                 oHtmlCible.modeRS = oCiu.specs.cibleEvt[i].mode;    // reaction uniforme ou non / pos clic sur oHtml
                 oHtmlCible.dirRS  = oCiu.specs.cibleEvt[i].dir;     // direction (si comportement = mono)
             }

          // enregistrement comportement DD pour navigateur IE
          //(pas d'utilisation de attachEvent qui rend this indisponible -> utilisation d'1 m?thode maison addHandler)
          if ( typeof document.addEventListener == "undefined"){

                 // enregistrement du MDown
                 //var tOCible =  oCiu.specs.cibleEvt;

                 for (var i=0; i < oCiu.specs.cibleEvt.length; i++) {
                   oHtmlCible = oCiu.specs.cibleEvt[i].oHtml;

                   oHtmlCible.addHandler = addHandler;

                   oHtmlCible.methodRSMouseDown = ReSizeMouseDownHandler;
                   oHtmlCible.methodRSMouseMove = ReSizeMouseMoveHandler;
                   oHtmlCible.methodRSMouseUp   = ReSizeMouseUpHandler;

                   oHtmlCible.addHandler(oHtmlCible,'onmousedown','methodRSMouseDown');
                   oHtmlCible.addHandler(oHtmlCible,'onmousemove','methodRSMouseMove');
                   oHtmlCible.addHandler(oHtmlCible,'onmouseup','methodRSMouseUp');

                   // pour test
                   oHtmlCible.methodDebRS   = function (){window.status ='debut de la deformation this.id='+this.id;};
                   oHtmlCible.addHandler(oHtmlCible,'onmousedown','methodDebRS');
                   oHtmlCible.methodFinRS   = function (){window.status ='fin de la deformation';};
                   oHtmlCible.addHandler(oHtmlCible,'onmouseup','methodFinRS');
                 }

//  = extension de :              this.onmousedown = ReSizeMouseDownHandler;
//                                this.onmousemove = ReSizeMouseMoveHandler;
//                                this.onmouseup   = ReSizeMouseUpHandler;
          }

          // enregistrement W3C
          else{
              if (!document.enregtReSize){
                 document.enregtReSize = true;
                 document.addEventListener("mousemove",ReSizeMouseMoveHandler, false);
                 document.addEventListener("mouseup",  ReSizeMouseUpHandler, false);
                 document.addEventListener("mousedown",ReSizeMouseDownHandler, false);
                 // pour supprimer le comportement par defaut de selection d'image propre ? Mozilla lors du MouseDown
                 document.addEventListener("mousedown",StopSelectDef,false);
//                 oHtmlCible.addEventListener("mousedown",StopSelectDef,false);
// ne marche pas pourquoi ?                 document.addEventListener("mousedown",stopDefault,false);
              }
          }


}

        StopSelectDef = function(e){
                 stopDefault(e);
        }



        ReSizeMouseDownHandler= function (e){
        //----------------------------------------
                if (!e) var e = window.event;

                // test la validit? de la cible du mouse down / redimensionnement
                var oSourceEvt = e.target ? e.target: e.srcElement;
                if (   (! oSourceEvt.reSize)
                    || (   oSourceEvt.refObjSpecsRS
                         && (oSourceEvt.refObjSpecsRS.oCiu['ReSize'].lockReSize)))
                         
                   return;
                 var oHtml = oSourceEvt;

                // oHtml monolithique , direction predetermin?e
                var direction;
                if (oHtml.modeRS != 'mono'){
                    direction  = oHtml.dirRS;
                }

                // oHtml ? sensibilit? variable et direction = fct(zone)
                else {
                    direction = DirDeplact(oHtml, e, pixHeight(oHtml), pixWidth(oHtml)
                                           , oHtml.margeSensible||defMargeSensibleDD,false);
                }

                // zone d'exclusion / reSize'
               if (! direction)  {
               traceExec('position invalide/RS',58);
                   oHtml.style.cursor = "default";
                   return;
               }
               else
                   oHtml.style.cursor = direction + "-resize";

               traceExec('position valide/RS',58);
/*
   // blocage DD
   if (oHtml.oCiu['DragAndDrop']) {
//     oHtml.oCiu['DragAndDrop'].svgDragAndDrop = oHtml.oCiu['DragAndDrop'].dragAndDrop;
//     oHtml.oCiu['DragAndDrop'].dragAndDrop = false;
     oHtml.svgDragAndDrop = oHtml.dragAndDrop;
     oHtml.dragAndDrop = false;
     //traceAct3('blocage DD id=',oHtml.id);
   }
*/

                // recup objet detenant les specs du RS
                var oSpecs = oHtml.refObjSpecsRS;
              
//               traceExec('Md contenuFenetre.height= '+oSpecs.oCiu.contenuFenetre.style.height,60);

                // chargement des limites s'il y a lieu
                if (oSpecs.specs.majDyn)
                   oSpecs.loadLimitsDynRS(oSpecs.specs.objetADeformer.parentNode);          // modif du 23/12/2003

                // objet Html ? deplacer in fine
                var objetADeformer =  oSpecs.specs.objetADeformer;
              
traceExec(';;;Md objetADeformer.style.height= ' + parseInt(objetADeformer.style.height),60);

                // objet Html en deplact pdt le RS
                //  soit un cadre fantome mobile
                if (oSpecs.specs.fantome){
                  var cadreFantome = document.getElementById('cadreFantomeUnique');
                  if (cadreFantome == null) {
                    cadreFantome = document.createElement('DIV');
                    cadreFantome.id = 'cadreFantomeUnique';
                    cadreFantome.className = 'fantomeRS_' + oSpecs.specs.fantome.aspect; //'cadreDeplactFenetreMobile';
                    objetADeformer.parentNode.appendChild(cadreFantome);
                  }
                  else
                  if (cadreFantome.parentNode != objetADeformer) {
                    cadreFantome.parentNode.removeChild(cadreFantome);
                    cadreFantome = document.createElement('DIV');
                    cadreFantome.id = 'cadreFantomeUnique';
                    cadreFantome.className = 'fantomeRS_' + oSpecs.specs.fantome.aspect; //'cadreDeplactFenetreMobile';
                    objetADeformer.parentNode.appendChild(cadreFantome);
                  }

                  cadreFantome.style.zIndex = 100000;

                  cadreFantome.style.top    = pixTop(objetADeformer);
                  cadreFantome.style.left   = pixLeft(objetADeformer);
                  cadreFantome.style.width  = pixWidth(objetADeformer);

                      // sous Moz la bordure n est pas compt?e ds width il faut la soustraire pour ne pas provoquer d ascenceur
                      // ds la div container de fantome
                      // ancienne assertion fausse :
                      // sous IE c est inutile la bordure etant comprise ds width , mais comme borderTopWidth n existe pas sous IE
                      // et que l argt '0' permet ? getComputStyle de ramener 0 l appel peut se faire ss dommage mm ds ce cadre
                  var bWidth = 0;
                  if (window.getComputedStyle) {
                    var topWidthBord = getComputStyle(cadreFantome,'borderTopWidth','0');
                    var bottomWidthBord = getComputStyle(cadreFantome,'borderBottomWidth','0');
                    if (  topWidthBord  || bottomWidthBord){
                      bWidth =     topWidthBord  + bottomWidthBord;
                      cadreFantome.style.width = parseInt(cadreFantome.style.width) - bWidth;
                    }
/* ou bien :
                  if (getComputStyleStr(cadreFantome,'borderStyle') != 'none'){
                      var bWidth =         getComputStyle(cadreFantome,'borderTopWidth','0')
                                       +   getComputStyle(cadreFantome,'borderBottomWidth','0');
                      cadreFantome.style.width = parseInt(cadreFantome.style.width) - bWidth;
                  }
*/
                  }
traceExec('!!! objetADeformer.id= '+objetADeformer.id,60);
                  cadreFantome.style.height = pixHeight(objetADeformer);
                  traceExec('RS -1- Md cadreFantome.style.height = pixHeight(objetADeformer)= '+pixHeight(objetADeformer),75);
                  traceExec('!!! Md cadreFantome.style.height= '+cadreFantome.style.height,60);
                  var bHeight = 0;
                  // a revoir : meme traitement que pour width necessaire ?
                  if (window.getComputedStyle) {
                      bHeight =     topWidthBord  + bottomWidthBord;
//                      alert( 'bHeight= '+bHeight );
                      cadreFantome.style.height = parseInt(cadreFantome.style.height) - bHeight;
                  }

                  cadreFantome.style.visibility = 'visible';

                  var objetEnDeformation = cadreFantome;
                  objetEnDeformation.refObjSpecs = oSpecs;  // pour Moz en mode fantome
                }
                // soit directement l element ? deplacer
                else
                  var objetEnDeformation = objetADeformer;

                var top    = pixTop(objetEnDeformation);
                var left   = pixLeft(objetEnDeformation);
                var width  = pixWidth(objetEnDeformation);
                var height = pixHeight(objetEnDeformation);
                traceExec('++++Md  height obj en def= '+height,58);
                oReSize = {oThis          : oSpecs,
                            oSource        : oHtml,
                            fantome        : oSpecs.specs.fantome,
                            objetEnDeformation : objetEnDeformation,
                            objetADeformer : objetADeformer,
                            limitReDim   : oSpecs.limitReDim,
                            direction      :  direction,
                            clientXI       :  e.clientX,
                            clientYI       :  e.clientY,
                            topI           : top,
                            leftI           :left,
                            widthI         : width,
                            wBordGD        : bWidth,
                            wBordHB        : bHeight,
                            heightI        : height,

                            magnet         : oSpecs.specs.magnet,

                            mvtEffectif     : false
                            };
                traceExec('RS -0- objetEnDeformation.style.height= '+objetEnDeformation.style.height,75);
                traceExec('RS -0- heightI = pixHeight(objetEnDeformation)= '+oReSize.heightI,75);
                traceExec('RS -0- objetADeformer.style.height= '+objetADeformer.style.height,75);

traceExec('Md oReSize.objetEnDeformation.style.height= ' + parseInt(oReSize.objetEnDeformation.style.height),62);
traceExec('Md oReSize.objetADeformer.style.height=     ' + pixHeight(oReSize.objetADeformer)    ,62);
                if ( this.setCapture) {
                   this.setCapture();
                   stopEvent(e);
                   if (   (!oSpecs.specs.modCurs.avantDD)
                       && (oSpecs.specs.modCurs.auClic)) {
                      DragAndDrop.modCurseur(oHtml,direction,oSpecs.limitDeplact.orientation);
                   }
                }
                else
                   if (   (!oSpecs.specs.modCurs.avantDD)
                       && (oSpecs.specs.modCurs.auClic)) {
                    if (oSpecs.specs.fantome)
                         DragAndDrop.modCurseur(objetEnDeplact,direction,oSpecs.limitDeplact.orientation);
                    else
                         DragAndDrop.modCurseur(oHtml,direction,oSpecs.limitDeplact.orientation);
                   }

//              stopEvent();
        }


          ReSizeMouseMoveHandler = function (e){
         //----------------------------------
            if (!e) var e = window.event;

            var oHtml = e.target        ? e.target        : e.srcElement;

               // action non amorc?e : d?termination et affichage des possibilit?s (direction)
   if (!oReSize){
/*
                       if (oHtml.oCiu['DragAndDrop']  && oHtml.oCiu['DragAndDrop'].dsChampMm){
                         oHtml.oCiu['DragAndDrop'].dsChampMm = false;
                         return;
                       }
*/
                if (   (! oHtml.reSize)
                    || (   oHtml.refObjSpecsRS
                         && (oHtml.refObjSpecsRS.oCiu['ReSize'].lockReSize))) {
//                         traceExec('move hors reSize sur oHtml.id='+oHtml.id,61);
                    oHtml.style.cursor = "default";         // ajout 9/10/03
                   return;
                }

      if (oHtml.reSize)
                  {
//                         traceExec('move sur reSize oHtml.id= '+oHtml.id,61);
                // oHtml monolithique , direction predetermin?e
                var direction;
                // mono = monolithique par opposition ? fragments
                // avec chaque fragment correspondant ? une orientation pr?d?finie
                if (oHtml.modeRS != 'mono'){
                    direction  = oHtml.dirRS;
                }

                // oHtml ? sensibilit? variable et direction = fct(zone)
                else {
                    direction = DirDeplact(oHtml, e, pixHeight(oHtml), pixWidth(oHtml)
                                           , oHtml.margeSensible||defMargeSensibleDD, false);
                }
                if (direction == ""){
//          oHtml.style.cursor = svgCursor;
                    oHtml.style.cursor = "default";
                    traceExec('RS mm ap DirDeplact dir='+direction+' curs def restor?',58);
                    //oHtml.oCiu['ReSize'].dsChampMm = false;
                 }
                 else{
                    oHtml.style.cursor = direction + "-resize";
                   traceExec('RS mm ap DirDeplact dir='+direction+' curs ad hoc',58);
                    //oHtml.oCiu['ReSize'].dsChampMm = true;
                 }
       }
   }

   // d?formation de l'objet
   else{
      if (e.clientX >= 0  &&  e.clientY >= 0){
         oReSize.mvtEffectif = true;


        // positions sans mouvement
        var nvTop    = parseInt(oReSize.objetEnDeformation.style.top);
        var nvLeft   = parseInt(oReSize.objetEnDeformation.style.left);
        var nvWidth  = parseInt(oReSize.objetEnDeformation.style.width);
//        var nvHeight = parseInt(oReSize.objetEnDeformation.style.height);
        var nvHeight = pixHeight(oReSize.objetEnDeformation);
 traceExec('Mm (oReSize.objetEnDeformation.id= '+oReSize.objetEnDeformation.id,60);
 traceExec('Mm dim ss mvt height= '+nvHeight,60);

          // attention direction ne signifie pas direction ! mais pr?cise le bord de la div utilis? pour le RS
          //a revoir ...
        var direction = oReSize.direction;

        // calcul des variations sans contraintes
        //----------------------------------------

        //---- double symetrie
        if (oReSize.limitReDim.dbleSymetrie){

        }
        else
        //---- pas de mouvement symetrique
        if (!oReSize.limitReDim.symetrie){
          if (direction.indexOf('e')!=-1){
            nvWidth = oReSize.widthI + (e.clientX - oReSize.clientXI);
          }
          else
          if (direction.indexOf('w')!=-1){
            nvLeft  = oReSize.leftI + (e.clientX - oReSize.clientXI);
            nvWidth = oReSize.widthI - (e.clientX - oReSize.clientXI);
          }

          if (direction.indexOf('s')!=-1){
            nvHeight = oReSize.heightI + (e.clientY - oReSize.clientYI);
          }
          else if (direction.indexOf('n')!=-1){
            nvTop    = oReSize.topI    + (e.clientY - oReSize.clientYI);
            nvHeight = oReSize.heightI - (e.clientY - oReSize.clientYI);
          }

        }

        //---- mouvement symetrique
        else {
          var diff;
          if (direction.indexOf('n')!=-1){
            nvTop = oReSize.topI + (e.clientY - oReSize.clientYI);
            nvHeight = oReSize.heightI - 2 * (e.clientY - oReSize.clientYI);
              if (oReSize.limitReDim.symetrie == 'radiale'){
               diff = (e.clientY - oReSize.clientYI);
               nvLeft = oReSize.leftI + diff;
               nvWidth = oReSize.widthI - 2 * diff;
              }
          }
          else if (direction.indexOf('s')!=-1) {
            nvTop = oReSize.topI - (e.clientY - oReSize.clientYI);
            nvHeight = oReSize.heightI + 2 * (e.clientY - oReSize.clientYI);

              if (oReSize.limitReDim.symetrie == 'radiale'){
              diff = (e.clientY - oReSize.clientYI);
              nvLeft = oReSize.leftI - diff;
              nvWidth = oReSize.widthI + 2* diff;
              }
          }
          if (direction.indexOf('w')!=-1) {
            nvLeft = oReSize.leftI + (e.clientX - oReSize.clientXI);
            nvWidth = oReSize.widthI - 2 * (e.clientX - oReSize.clientXI);

              if (oReSize.limitReDim.symetrie == 'radiale'){
              diff = (e.clientX - oReSize.clientXI);
              nvTop = oReSize.topI + diff;
              nvHeight = oReSize.heightI - 2 * diff;
              }
          }
          else if (direction.indexOf('e')!=-1) {
            nvLeft = oReSize.leftI - (e.clientX - oReSize.clientXI);
            nvWidth = oReSize.widthI + 2* (e.clientX - oReSize.clientXI);

              if (oReSize.limitReDim.symetrie == 'radiale'){
              diff = (e.clientX - oReSize.clientXI);
              nvTop = oReSize.topI - diff;
              nvHeight = oReSize.heightI + 2 * diff;
              }
          }
        }
 traceExec('Mm av contraintes nvHeight = '+nvHeight+' nvWidth= '+ nvWidth+' nvLeft= '+ nvLeft,58);

        //  prise en compte des contraintes
        //---------------------------------
        var rectLim = oReSize.limitReDim.rectLim;
        var lim = oReSize.limitReDim;

traceExec('Mm rectLim left = '+rectLim.left+' right= '+ rectLim.right+' lim.widthMax= '+lim.widthMax
+ ' lim.widthMin= '+lim.widthMin,58);

        //---- mouvement asymetrique
        if (!lim.symetrie){
          // contraintes est-ouest

          if (nvWidth > lim.widthMax) {
           nvWidth = lim.widthMax;
           if (direction == 'w')   // sensDeplact == 'e'
             nvLeft =  (oReSize.leftI + oReSize.widthI - 1 )  - lim.widthMax + 1;
             traceExec('contrainte 1');
          }

//          if  (   lim.bRectLim
          if  (   (rectLim.left != undefined)
               && (nvLeft < rectLim.left)) {
           nvWidth = nvWidth - (rectLim.left - nvLeft);
           nvLeft = rectLim.left;
             traceExec('contrainte 2');
          }

          else
//          if  (   lim.bRectLim
          if  (   (rectLim.right != undefined)
               && ((nvWidth + nvLeft - 1) > rectLim.right)) {
           nvWidth = rectLim.right - oReSize.leftI + 1;
             traceExec('contrainte 3');
          }

          else
          if (nvWidth < lim.widthMin){
           nvWidth = lim.widthMin;
             traceExec('contrainte 4 nvWidth = '+nvWidth+' lim.widthMin= '+lim.widthMin,58);

          //if (direction == 'w')   // sensDeplact == 'e'
           if (direction.indexOf('w')!=-1)
             nvLeft =  (oReSize.leftI + oReSize.widthI - 1 )  - lim.widthMin + 1;
          }

          // contraintes nord-sud
          if (nvHeight > lim.heightMax){
traceExec('Mm (nvHeight > lim.heightMax) nvHeight= '+nvHeight+' lim.heightMax= '+lim.heightMax,60);
           nvHeight = lim.heightMax;
           if (direction.indexOf('n')!=-1)
//           if (direction == 'n')
             nvTop =  (oReSize.topI + oReSize.heightI - 1 )  - lim.heightMax + 1;
             traceExec('contrainte 5');
          }

//           traceExec('>>>>> as contrainte 4: oReSize.limitReDim.bRectLim='+lim.bRectLim,30);
//          if (   lim.bRectLim
          if (   (rectLim.top != undefined)
              && (nvTop < rectLim.top)) {
traceExec('Mm (nvTop < rectLim.top) nvHeight= '+nvHeight+' rectLim.top= '+rectLim.top+' nvTop= '+nvTop,60);
           nvHeight = nvHeight - (rectLim.top - nvTop);
           nvTop = rectLim.top;
             traceExec('contrainte 6');
          }
          else
//          if (   lim.bRectLim
          if (   (rectLim.bottom != undefined)
              && ((nvHeight + nvTop - 1) > rectLim.bottom)) {
traceExec('Mm (nvHeight + nvTop - 1) > rectLim.bottom) nvHeight= '+nvHeight+' rectLim.bottom= '+rectLim.bottom+' TopI= '+oReSize.topI,60);
           nvHeight = rectLim.bottom - oReSize.topI + 1;
             traceExec('contrainte 7');
          }
          else
          if (nvHeight < lim.heightMin){
traceExec('Mm (nvHeight < lim.heightMin) nvHeight= '+nvHeight+' lim.heightMin= '+lim.heightMin,60);
           nvHeight = lim.heightMin;
//           if (direction == 'n') // position nord
           if (direction.indexOf('n')!=-1)
             nvTop =  (oReSize.topI + oReSize.heightI - 1) - lim.heightMin + 1;
             traceExec('contrainte 8');
          }

        }

        //--- mvt symetrique
        else {

         // contraintes est-ouest
         if (nvWidth > lim.widthMax){
           nvWidth = lim.widthMax;
           nvLeft  = oReSize.leftI - ((lim.widthMax - oReSize.widthI) / 2 ) + 1;
         }

//         if ( oReSize.limitReDim.bRectLim
         if (  (rectLim.left != undefined)
            && (nvLeft < rectLim.left)){
           nvWidth = nvWidth - 2 * (rectLim.left - nvLeft);
           nvLeft = rectLim.left;
         }
//         if (  lim.bRectLim
         if (  (rectLim.right != undefined)
            && ((nvWidth + nvLeft -1) > rectLim.right) ){
            var tropW =  (nvWidth + nvLeft - 1) - rectLim.right;
            nvWidth = nvWidth - 2 * tropW;
            nvLeft  = nvLeft + tropW - 1;
         }
         if (nvWidth < lim.widthMin){
            var manqueW = lim.widthMin - nvWidth;
            nvWidth = nvWidth + manqueW;
            nvLeft =  nvLeft - 0.5 * manqueW;
         }

         //contraintes nord-sud
         if (nvHeight > lim.heightMax){
           nvHeight = lim.heightMax;
           nvTop  = oReSize.topI - ((lim.heightMax - oReSize.heightI) / 2 ) + 1;
           traceExec('Mm sym contrainte 1');
         }

//         if (   lim.bRectLim
         if (   (rectLim.top != undefined)
             && (nvTop < rectLim.top) ){
             traceExec('Mm sym ctr 2 nvHeight= '+nvHeight+' rectLim.top= '+rectLim.top+'  nvTop= '+nvTop,60); 
           nvHeight = nvHeight - 2 * (rectLim.top - nvTop);
           nvTop = rectLim.top;
           traceExec('Mm sym contrainte 2',60);
         }

//         if (   lim.bRectLim
         if (   (rectLim.bottom != undefined)
             && ((nvHeight + nvTop - 1) > rectLim.bottom) ){
           var tropH = (nvHeight + nvTop - 1) - rectLim.bottom;
           nvHeight = nvHeight - 2 * tropH ;
           nvTop = nvTop + tropH - 1;
           traceExec('Mm sym contrainte 3');
         }

         if (nvHeight < lim.heightMin){
            var manqueH = lim.heightMin - nvHeight;
            nvHeight = nvHeight + manqueH;
            nvTop =  nvTop - 0.5 * manqueH;
           traceExec('Mm sym contrainte 4');
         }
        }
traceExec('Mm ap nvHeight= contraintes'+nvHeight,60);

        // effet grille magnetique (hypothese la div initiale respecte la grille en terme de position et de dimension)
        if (oReSize.magnet){
          if (!oReSize.limitReDim.symetrie){
          // prise en main nord et/ou est
           if (direction.indexOf('n')!=-1){
             var nvTopGrille =   Math.round(nvTop / oReSize.magnet.heightRow)
                             * oReSize.magnet.heightRow;
             var diffMagn = nvTop - nvTopGrille;  // > 0
             nvTop = nvTopGrille;
             nvHeight = nvHeight + diffMagn;
           }

           if (direction.indexOf('w')!=-1){
             var nvLeftGrille =      Math.round(parseInt(nvLeft) / oReSize.magnet.widthCol)
                       * oReSize.magnet.widthCol;
             diffMagn = nvLeft - nvLeftGrille;
             nvLeft = nvLeftGrille;
             nvWidth = nvWidth + diffMagn;
           }
           if (direction.indexOf('s')!=-1){
             var nvHeightGrille =      Math.round(parseInt(nvHeight) / oReSize.magnet.heightRow)
                                     * oReSize.magnet.heightRow;
             diffMagn = nvHeight - nvHeightGrille;
             nvHeight = nvHeightGrille;
           }
           if (direction.indexOf('e')!=-1){
             nvWidth =      Math.round(parseInt(nvWidth) / oReSize.magnet.widthCol)
                          * oReSize.magnet.widthCol;
           }
          }
          // avec deformation symetrique
          else{
             alert('deformation symetrique + grille magnetique non encore impl?ment?e');
          }
        }


        // application
        //------------
        //calcul des variations
        if (oReSize.oThis.synchro){
          var deltaTop =  nvTop - parseInt(oReSize.objetEnDeformation.style.top);
          var deltaLeft =  nvLeft - parseInt(oReSize.objetEnDeformation.style.left);
          var deltaWidth =  nvWidth - parseInt(oReSize.objetEnDeformation.style.width);
          traceExec('Mm appli nvHeight= '+nvHeight,60);
          var deltaHeight =  nvHeight - pixHeight(oReSize.objetEnDeformation);
          traceExec('Mm appli deltaHeight = '+deltaHeight,60);
        }

        oReSize.objetEnDeformation.style.top    = nvTop;
        oReSize.objetEnDeformation.style.left   = nvLeft;
        oReSize.objetEnDeformation.style.width  = nvWidth;
traceExec('Mm nvHeight= '+nvHeight,60);
        oReSize.objetEnDeformation.style.height = nvHeight;
        traceExec('RS -2- Mm appli oReSize.objetEnDeformation.style.height = nvHeight= '+nvHeight,75);
        if (oReSize.oThis.synchro)
           oReSize.oThis.synchro({top:deltaTop, left:deltaLeft, width:deltaWidth, height:deltaHeight});
      }

   }
   stopEvent(e);
}

          ReSizeMouseUpHandler = function (e){
         //--------------------------------
               if (!e) var e = window.event;
               if (oReSize && oReSize.objetEnDeformation){
                   if ( this.releaseCapture){
/*                     if (   (!oDeplact.oThis.specs.modCurs.avantDD)
                        && (oDeplact.oThis.specs.modCurs.auClic)) {
                          this.style.cursor = 'default';
                          traceExec('supp cursor',30);
                     }
*/
                     this.releaseCapture();
                   }
                   else{
                   if (oReSize.fantome)
                     oReSize.objetEnDeformation.style.cursor = 'default';
                   else
                     oReSize.oSource.style.cursor = 'default';
                   }

                   // deblocaga DD
                   var  oHtml = oReSize.objetEnDeformation;
                   if (oHtml.oCiu && oHtml.oCiu['DragAndDrop']){
                     oHtml.dragAndDrop = oHtml.svgDragAndDrop;
                   }

                   var oThis = oReSize.oThis;
                   // calcul des variations seult si passage fcts callbacks
                   if (oThis.afterRS){
                     // objet ? deformer in fine non encore deform?
                     if (oReSize.objetADeformer != oReSize.objetEnDeformation) {
                       var deltaTop =   parseInt(oReSize.objetEnDeformation.style.top)
                                    - parseInt(oReSize.objetADeformer.style.top) ;
                       var deltaLeft = parseInt(oReSize.objetEnDeformation.style.left)
                                     - parseInt(oReSize.objetADeformer.style.left);
                       var deltaWidth = parseInt(oReSize.objetEnDeformation.style.width)
                                   - parseInt(oReSize.objetADeformer.style.width) + oReSize.wBordGD;
traceExec('oReSize.objetEnDeformation.style.height= ' + parseInt(oReSize.objetEnDeformation.style.height),60);
traceExec('oReSize.objetADeformer.style.height=     ' + pixHeight(oReSize.objetADeformer)    ,60);
                       var deltaHeight = parseInt(oReSize.objetEnDeformation.style.height)
                                     - pixHeight(oReSize.objetADeformer) + oReSize.wBordHB;
//                                     - parseInt(oReSize.objetADeformer.style.height) + oReSize.wBordHB;
                       traceExec('RS -3- Mup  afterRs existe deltaHeight = parseInt(oReSize.objetEnDeformation.style.height)- pixHeight(oReSize.objetADeformer) + oReSize.wBordHB= '+deltaHeight,75);
traceExec('______deltaHeight= '+deltaHeight,62);
                     }
                     // deformation directe : ref aux dims initiales
                     else{
                       var deltaTop =   parseInt(oReSize.objetEnDeformation.style.top)
                                      - parseInt(oReSize.topI);
                       var deltaLeft =  parseInt(oReSize.objetEnDeformation.style.left)
                                      - parseInt(oReSize.leftI);
                       var deltaWidth =  parseInt(oReSize.objetEnDeformation.style.width)
                                       - parseInt(oReSize.widthI);
                       var deltaHeight =  parseInt(oReSize.objetEnDeformation.style.height)
                                        - parseInt(oReSize.heightI);
                       traceExec('RS -4- Mup pas de afterRs deltaHeight = parseInt(oReSize.objetEnDeformation.style.height)- parseInt(oReSize.heightI)= '+deltaHeight,75);
                     }
                   }

                   if (oReSize.objetADeformer != oReSize.objetEnDeformation){

                     oReSize.objetADeformer.style.top    = oReSize.objetEnDeformation.style.top;
                     oReSize.objetADeformer.style.left   = oReSize.objetEnDeformation.style.left;
                     oReSize.objetADeformer.style.width  = parseInt(oReSize.objetEnDeformation.style.width) + oReSize.wBordGD;

/*
                     if (deltaWidth < 0)
                       oThis.oCiu.containerHtml.style.width = 300;
*/

//ds le contexte de la gestion de fenetre
//  l instruction suivante modifie directement la hauteur de cadreFenetre
// ceci peut ?tre contradictoire avec 1 certain mode de gestion des fenetres ds lequel seul contenuFenetre voit sa taille modifi?e
// en tout ?tat de cause dans le mode susdit cette instruction est superf?tatoire (mais a des cons?quences car cette dimension
// passe ainsi d' automatique ? fix?e)').
// ajout de commentaire : idem pour l instruction pr?c?dente
                     oReSize.objetADeformer.style.height = parseInt(oReSize.objetEnDeformation.style.height) + oReSize.wBordHB;
                     traceExec('RS -5- Mup oReSize.objetADeformer.id= '+oReSize.objetADeformer.id
                     +' oReSize.objetADeformer.style.height = parseInt(oReSize.objetEnDeformation.style.height) + oReSize.wBordHB='+oReSize.objetADeformer.style.height,1);
                   }

                   if (oReSize.fantome)
                     oReSize.objetEnDeformation.style.visibility = 'hidden';

                    if (oReSize.mvtEffectif) {
                     if (oThis.afterRS)
                       oThis.afterRS({top:deltaTop, left:deltaLeft, width:deltaWidth, height:deltaHeight});
                   }
                   else {
                     if (oThis.afterClic)
                       oThis.afterClic();
                   }

                   oReSize = null;
                   stopEvent(e);
               }
          }


ReSize.modCurseur = function (oHtml, direction, orientation){
//=======================================
                         if (direction == ""){
// ne fctionne pas le curseur peut correspondre au passage precdt ds la zone sensible
//                            oHtml.style.cursor = oHtml.svgCursor;
                            oHtml.style.cursor = "default";
//                            oHtml.oCiu['DragAndDrop'].dsChampMm = false;
                         }
                         else
                         if (orientation == 'v')         //oSpecs.limitDeplact.
                           {oHtml.style.cursor = direction + "-resize";
//                            traceExec('DD mm ds champ dir='+direction,12);
//                            oHtml.oCiu['DragAndDrop'].dsChampMm = true;
                         }

                         else
                         if (orientation == 'h'){
                           oHtml.style.cursor = direction + "-resize";
//                            traceExec('DD mm ds champ dir='+direction,12);
//                            oHtml.oCiu['DragAndDrop'].dsChampMm = true;
                         }

                         else{
                           oHtml.style.cursor = 'move';
//                            traceExec('DD mm ds champ dir='+direction,12);
//                            oHtml.oCiu['DragAndDrop'].dsChampMm = true;
                         }
}

/*cf global.js
DirDeplact = function(oHtml,e,height,width,margeSens,exclusionMarge)
//===============
// retourne la position cardinale du curseur  sous forme d'une chaine (ex: se, n ...)
//   si le curseur se trouve dans la marge    (exclsuion = false)
//   si le curseur se trouve hors de la marge (exclusion = true)
{
//var width  = nbPixels(heightAvecUnite);
//var height = nbPixels(widthAvecUnite);

var limOrientation = oHtml.dirRS;
margeSens = margeSens || 0;
traceExec('DirDeplact -entree-',58);
traceExec('oHtml.id= '+oHtml.id,58);
traceExec(' -- test/zone sensible='+(exclusionMarge?'centre':'marge'),58);
traceExec(' -- larg. marge = '+margeSens,58);
traceExec(' -- height = '+height+' width= '+width+' limOrientation= '+limOrientation,58);

var dir="";
traceExec('oHtml.style.border= '+oHtml.style.border,58);
traceExec('oHtml.style.borderLeftWidth= '+oHtml.style.borderLeftWidth,58);
traceExec('oHtml.style.borderTopWidth= '+oHtml.style.borderTopWidth,58);

var xPRC = e.offsetX ? (e.offsetX + parseInt(oHtml.currentStyle.borderLeftWidth)) : e.layerX;
var yPRC = e.offsetY ? (e.offsetY + parseInt(oHtml.currentStyle.borderTopWidth)) : e.layerY;
traceExec(' -- pos Rel Curs x='+xPRC+' y='+yPRC,58);
traceExec(' -- limites width:'+width+' height:'+height,58);

// test position  / centre
if (exclusionMarge){
// cette fa?on de faire est n?cessaire lorque 2 comportement se superpose sur le mm obj avec des directionns diff?rentes
// pour 1 seul comportement DD h ou v le 1er test est inutile
  if (    (margeSens != 0)                     // pour eviter le test problematique ds tableau Moz s'il n'y a pas de marge ? considerer
       && (
        (xPRC < margeSens)
      || (xPRC > (width - margeSens))
      || (yPRC < margeSens)
      || (yPRC > (height - margeSens)) )
  )
      dir = ''
  else{
   if (limOrientation == 'h')
    dir = 'w';
   else
   if (limOrientation == 'v')
    dir = 'n';
   else
    dir = 'x';
  }
// ancien code signification et usage a revoir
//   if (limOrientation != 'h')
//    dir = (  (yPRC > margeSens) && (yPRC < (height - margeSens))) ? 'n' : '';
//   if (limOrientation != 'v')
//    dir += (  (xPRC > margeSens) && (xPRC < (width - margeSens))  ) ? 'w' : '';
//  }
//
}

// test position / marges
else
{
  if ( limOrientation != 'h')
    if  (yPRC < margeSens)
        dir = "n";
    else if (yPRC > (height - margeSens))
        dir = "s";

  if (limOrientation != 'v')
    if  (xPRC < margeSens)
        dir += "w";
    else if (xPRC > (width - margeSens))
        dir += "e";
        traceExec('(width - margeSens) = '+(width - margeSens),58);
        }
  window.status = (exclusionMarge?'interne ':'marge ') +'height='+height+' width= '+width+' marge = '+margeSens+ " xPRC= " + xPRC + " yPRC= " + yPRC  + " dir= " + dir;
traceExec(' -- dir retourn?e= '+dir,58);
  return dir;
}
 */